GIT (вынесено в отдельный репозиторий в рамках ) - https://git.gosuslugi.local/ervu/source/mz-mnsv-ervu-abroad-forbidden-temporary
Описание
Сервис для работы с ВС "ЕРВУ_Передача сведений о запрете на выезд граждан из РФ" для ФОИВ ФСБ (urn://rostelekom.ru/ERVU-AbroadForbiddenTemporary/1.0.5). Принимает JSON из процессов, преобразует в XML и направляет в кафку для передачи в сервис mz-adapter и последующей отправки в ФОИВ через СМЭВ.
Сервис вынесен в отдельный репозиторий с использованием библиотеки mzServiceCore
Назначение
Сервис реализует передачу данных о введении или отмене временной меры "Запрет на выезд из Российской Федерации". JSON передаётся из процессов, преобразуется в XML сообщение по формату ВС https://lkuv.gosuslugi.ru/paip-portal/#/inquiries/card/b5fd2c89-7113-4883-9d59-1b9fa31df90b
На текущий момент работает с версией ВС 1.0.5
Вид сведений не подразумевает передачу вложений (решение о введении/отмене меры) !!!
Схема взаимодействия ФОИВ ФСБ по части введения и отмены временных мер
Примеры запроса
Инициатором сеанса выступает система ЕРВУ, передавая сообщение о введении или отмене временной меры через вид сведений urn://rostelekom.ru/ERVU-AbroadForbiddenTemporary (текущая версия 1.0.5). Сеанс работает в формате рассылка (Тип обмена - Целиковая маршрутизация рассылка), что подразумевает отсутствие ответа от получателя рассылки (ФОИВ ФСБ). Проверить состояние сообщения можно только через функционал "Судьба сообщения СМЭВ3". Подтверждение от ФОИВ приходит по отдельному виду сведений, работающему по формату "запрос - ответ" (см. Описание сервиса подтверждения меры "Запрет на выезд")
Структура запроса
| Поле в xml | Назначение поля | ФЛК | Кол-во возможных вхождений | Комментарий |
|---|---|---|---|---|
| Поле в xml | Назначение поля | ФЛК | Кол-во возможных вхождений | Комментарий |
| Начало блока common - основная информация о гражданине | ||||
| lastName | Фамилия | Кириллица, пробел, дефис. Максимум - 100 символов | 1..1 | |
| firstName | Имя | Кириллица, пробел, дефис. Максимум - 100 символов | 1..1 | |
| middleName | Отчество | Кириллица, пробел, дефис. Максимум - 100 символов | 0..1 | |
| gender | Пол | Справочник | 0..1 |
|
| Начало блока birthDate - сведения о дате рождения гражданина | ||||
| day | День рождения | Число от 01 до 31 | 1..1 | |
| month | Месяц рождения | Число от 01 до 12 | 1..1 | |
| year | Год рождения | Число от 1900 до 2099 | 1..1 | |
| Конец блока birthDate - сведения о дате рождения гражданина | ||||
| birthPlace | Место рождения | Кириллица, дефис, цифры, пробел, точка, запятая. Максимум - 250 символов | 1..1 | |
| snils | СНИЛС | 11 цифр | 0..1 | |
| idERN | Номер записи в едином регистре населения | 12 цифр | 0..1 | |
| Конец блока common - основная информация о гражданине | ||||
| Начало блока passport - сведения о паспорте гражданина | ||||
| series | Серия | 1..1 | ||
| number | Номер | 1..1 | ||
| issueDate | Дата выдачи | 1..1 | ||
| Конец блока passport - сведения о паспорте гражданина | ||||
| Начало блока measuresTemporary - информация о временных мерах | ||||
| measureId | Уникальный идентификатор | Латиница, дефис, цифры. Максимум - 85 символов | 1..1 | |
| status | Статус меры | boolean | 1..1 |
|
| number | Номер решения о введении меры | Цифры, дефис. Максимум - 250 символов | 1..1 | |
| date | Дата решения о введении меры | Дата в формате dd.mm.yyyy | 1..1 | |
| militaryCommissariatName | Наименование организации, принявшей решение о введении меры | Кириллица, цифры, пробел, спецсимволы. Максимум - 512 символов | 0..1 | |
| measureCode | Код временной меры | Справочник | 1..1 |
|
| measureName | Тип временной меры | Кириллица, пробел. Максимум - 100 символов | 1..1 | |
| militaryComissar | Фамилия военного комиссара | Кириллица, пробел, дефис. Максимум - 100 символов | 1..1 | |
| militaryComissarFirstName | Имя военного комиссара | Кириллица, пробел, дефис. Максимум - 100 символов | 1..1 | |
| militaryComissarMiddleName | Отчество военного комиссара | Кириллица, пробел, дефис. Максимум - 100 символов | 0..1 | |
| Конец блока measuresTemporary - информация о временных мерах | ||||
| sender | Передача кода маршрутизации | 1-7 символов | 1..1 | |
Пример сообщения рассылки в формате XML
Атрибут sender
В данном атрибуте передаётся код маршрутизации с мнемоникой стенда, с которого отправлено сообщение. Это необходимо для передачи в сообщение о подтверждении введения/отмены меры (для отправки сообщения на корректный стенд). Значение атрибута передаётся не из процессов, а закладывается в переменной окружения SENDER_CODE, установленной в сервисе
Пример на стенде TEST
Kafka
Consumer
- mz.in.request
- mz.out.response
- smev.status.handler
Producer
- pgs.proxy.endpoints.access.info
- mz.impl.info
- mz.impl.mock
- mz.scenario.info
- mz.out.request
- mz.in.response
- mz.in.json.response
- smev.status.handler
S3
Сервис имеет доступ к корзине mz-attachment с правами READ, WRITE
БД mz_ervu_restriction_info
В данной БД хранится информация о мерах, действующих и отменённых, по каждому из видов сведений (каждому ФОИВ)
Столбец | Дата тайп | NOT NULL | PK | Комментарий | Пример заполнения |
|---|---|---|---|---|---|
Столбец | Дата тайп | NOT NULL | PK | Комментарий | Пример заполнения |
| id | UUID | + | + | Идентификатор записи | 7492ff5e-9f0e-4d02-8e6d-a02b9e41a024 |
| request_id | UUID | + | Идентификатор запроса | 36aaa4f6-0995-43da-8162-1c87e6f9952b | |
| class | varchar(500) | Класс вида сведений | MeasuresTemporaryData@urn://rostelekom.ru/ERVU-AbroadForbiddenTemporary/1.0.5 | ||
| restriction_id | UUID | + | Идентификатор временной меры | 6ef19960-8bca-408d-a420-35b972871570 | |
| restriction_status | boolean | Статус временной меры | true | ||
| request_stamp | timestamp | + | Дата и время отправки запроса | 2024-07-12 21:52:26.562 | |
| received_smev_status | varchar(200) | Полученный статус от СМЭВ |
Владельцем БД номинально числится сервис mz-mnsv-ervu-driving-registration-vehicle, но у всех сервисов, отвечающих за временные меры, есть права на запись в данную таблицу
Проверка XML на валидность
В сервисе реализована проверка XML согласно XSD-схеме вида сведений. Флаг, отвечающий за функционал, лежит в конфиге сервиса по пути extra_options.validator.xml.enabled с значением true
В такой реализации некорректный JSON, поступающий из процессов и преобразованный в XML, проверяется внутри сервиса на валидность по схеме вида сведений. Схема расположена по пути /src/main/resources в папке с версией ВС
На текущий момент путь до XSD-схемы /src/main/resources/1_0_5/schema/schema.xsd
Если JSON некорректен, в логах сервиса будет ошибка
Пример ошибки из логов
В данном случае
Value 'Фамилия476592111354' - значение из процесса
pattern '[-А-Яа-яёЁ ]{1,100}' - паттерн RegExp, установленный для поля
type 'string-100' - тип данных для элемента, установленный в XSD схеме
Самая частая ошибка на тестовых стендах - в ФИО гражданина есть цифры (т.к. большинство записей заводится в таком формате: 'Фамилия476592111354 Имя476592111354 Отчество476592111354'), которые не предусмотрены в XSD
Дублирование сообщения
По
существующей бизнес-логике, при отправке сообщения о введении/отмене
меры в ФСБ, также уведомление отправляется в МВД (сервис
mz-mnsv-ervu-driving-registration-vehicle) по виду сведений urn://rostelekom.ru/ERVU-DrivingRegistrationVehicleForbiddenTemporary/1.0.3
Так как описанный выше вид сведений не подразумевает вложений, то при отправке в ФСБ вложений нет. Однако вид сведений МВД вложения подразумевает, и при уведомлении МВД о введении меры "Запрет на выезд" туда отправляется вложение, которого нет в "исходном" сообщении

Добавить комментарий